package com.telemetria.controller.pessoa;

import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;

import javax.faces.bean.ManagedBean;
import javax.faces.bean.RequestScoped;

import com.telemetria.dao.CidadeDao;
import com.telemetria.dao.CidadeDaoImpl;
import com.telemetria.dao.EnderecoDao;
import com.telemetria.dao.EnderecoDaoImpl;
import com.telemetria.dao.EstadoDao;
import com.telemetria.dao.EstadoDaoImpl;
import com.telemetria.dao.PaisDao;
import com.telemetria.dao.PaisDaoImpl;
import com.telemetria.dao.PessoaDao;
import com.telemetria.dao.PessoaDaoImpl;
import com.telemetria.entity.Pessoa;
import com.telemetria.entity.endereco.Cidade;
import com.telemetria.entity.endereco.Endereco;
import com.telemetria.entity.endereco.Estado;
import com.telemetria.entity.endereco.Pais;
import com.telemetria.util.TelemetriaContants;

@ManagedBean(name = "pessoaController")
@RequestScoped
public class PessoaController implements Serializable {

	
	private static final long serialVersionUID = 9052728082970351236L;
	
	protected Pessoa pessoa;
	protected Endereco endereco;
	protected String resultadoOperacao;
	protected List<Estado> listaEstados;
	protected List<Cidade> listaCidades;
	protected List<Pessoa> listaPessoas;
	protected List<Pais> listaPaises;
	protected Long estadoSelecionado;
	protected Long cidadeSelecionada;
	protected Long paisSelecionado;
	protected Long pessoaSelecionada;
	protected boolean estadoDisabled;
	protected boolean cidadeDisabled;
    
    static PessoaDao pessoaDao;            
    static PaisDao paisDao;
    static EstadoDao estadoDao;
    static CidadeDao cidadeDao;
    static EnderecoDao enderecoDao;
    protected boolean isUpdate = false;
    protected boolean isInsert = false;
    protected boolean isDelete = false;
    
    public PessoaController() {
    	
    	cidadeDisabled = false;
    	estadoDisabled = false;
    	pessoaDao = new PessoaDaoImpl();
    	paisDao = new PaisDaoImpl();
    	estadoDao = new EstadoDaoImpl();
    	cidadeDao = new CidadeDaoImpl();
    	enderecoDao = new EnderecoDaoImpl();
    	
    }    
   
    
    public void atualizarComponentes(){
    	if(paisSelecionado != TelemetriaContants.CD_PAIS_BRASIL){
    		estadoSelecionado = 0L; 
    		cidadeDisabled = true;
    		estadoDisabled = true;
    	}else{
    		cidadeDisabled = false;
    		estadoDisabled = false;
    	}
    }
    
    public void remove(String id){
    	
    	//remover usando cascade ou deletando todas as dependencias primeiro
    	pessoa = new Pessoa();
    	endereco = new Endereco();
    	
    	pessoa = pessoaDao.findByPK(Long.parseLong(id));
    	
    	endereco = enderecoDao.findEnderecoByPK(pessoa.getEndereco().getId());
    	
    	pessoaDao.delete(pessoa);
    	enderecoDao.deleteEndereco(endereco);
    	
    }
    
    
    public void iniciaListaPessoa(){        
        setListaPessoas(pessoaDao.find(null));
    }

    public Pessoa getPessoa() {
        return pessoa;
    }

    public void setPessoa(Pessoa pessoa) {
        this.pessoa = pessoa;
    }

    public String getResultadoOperacao() {
        return resultadoOperacao;
    }

    public void setResultadoOperacao(String resultadoOperacao) {
        this.resultadoOperacao = resultadoOperacao;
    }

    public void atualizarCidades() {        
         setListaCidades(cidadeDao.findCidadesByPK(this.getEstadoSelecionado()));               
    }

    protected void iniciaListaEstados() {
        setListaEstados(estadoDao.findAllEstado());
    }
    
    public List<Estado> getListaEstados() {
        return listaEstados;
    }

    public void setListaEstados(List<Estado> listaEstados) {
        this.listaEstados = listaEstados;
    }

    public List<Cidade> getListaCidades() {
        return listaCidades;
    }

    public void setListaCidades(List<Cidade> listaCidades) {
        this.listaCidades = listaCidades;
    }

    public Long getEstadoSelecionado() {
        return estadoSelecionado;
    }   

    public void setEstadoSelecionado(Long estadoSelecionado) {
        this.estadoSelecionado = estadoSelecionado;
    }

    public Long getCidadeSelecionada() {
        return cidadeSelecionada;
    }

    public void setCidadeSelecionada(Long cidadeSelecionada) {
        this.cidadeSelecionada = cidadeSelecionada;
    }

    public Long getPaisSelecionado() {
        return paisSelecionado;
    }

    public void setPaisSelecionado(Long paisSelecionado) {
        this.paisSelecionado = paisSelecionado;
    }

    public List<Pais> getListaPaises() {
        return listaPaises;
    }

    public void setListaPaises(List<Pais> listaPaises) {
    	List<Pais> paises = new ArrayList<Pais>();
    	
    	for(Pais pais : listaPaises){
    		paises.add(new Pais(pais.getId(), pais.getDeNome().substring(0, pais.getDeNome().length()<20 ? pais.getDeNome().length() : 20 ), pais.getDeIniciais()));
    	}
    	
        this.listaPaises = paises;
    }

    protected void iniciaListaPaises() {
        setListaPaises(paisDao.findAllPais());        
    }

    public List<Pessoa> getListaPessoas() {
        return listaPessoas;
    }

    public void setListaPessoas(List<Pessoa> listaPessoas) {
        this.listaPessoas = listaPessoas;
    }

    public Long getPessoaSelecionada() {
        return pessoaSelecionada;
    }

    public void setPessoaSelecionada(Long pessoaSelecionada) {
        this.pessoaSelecionada = pessoaSelecionada;
    }

	public boolean getEstadoDisabled() {
		return estadoDisabled;
	}


	public void setEstadoDisabled(boolean isEstadoDisabled) {
		this.estadoDisabled = isEstadoDisabled;
	}

	public boolean getCidadeDisabled() {
		return cidadeDisabled;
	}

	public void setCidadeDisabled(boolean isCidadeDisabled) {
		this.cidadeDisabled = isCidadeDisabled;
	}
    
}
